<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /* 
            Set中不允许存在重复数据
            方法有：
                    1.add()  
                    2.delete() 删除匹配数据
                    3.clear() 清空整个set集合
                    4.keys()
                    5.values()  
                    6.forEach()  遍历
                    7.has()  查询 返回布尔值
                    8.size() 获取set元素集合的元素数量（只读，不能赋值，赋值无效）
        */
        let set = new Set();
        set.add(1);
        set.add(3);
        set.add(5);
        set.add(7)
        set.add(7) //无效
        set.delete(7)
        console.log(set.has(7)); //false
        set.forEach(n=>console.log(n));  // 1 3 5

        // Set 应用
        //去重
        const arr1=[22,33,44,55,66,77,11,22,44]
        // let arr2=new Set(arr1)
        console.log([...new Set(arr1)])

        /* 
            Map 可存放键值对
            方法有：
                    1.set(key,value)
                    2.clear()
                    3.delete(key) 删除指定的键
                    4.forEach() 注意：遍历出的内容是 值
                    5.keys()
                    6.values()
                    7.size
                    8.get(键)：根据一个键得到对应的值
                    9.has(键)：判断某个键是否存在

        */
       let map =new Map();
       map.set('key1','value1')
       map.set(2,'value2')
    //    map.clear()
        
       console.log(map.get(2))
       console.log(map.has(2))

       /* 
        总结：
            set和map是es6新增的集合类型。
            Set
            创建：可以用new set()进行创建。
            方法：add,添加一个集合到末尾；has判断集合中是否存在对应的数据。clear清空集合。set也可以用于去重，new set([]),原理主要根据Object.is进行判断。
            循环：for…of 或者 集合也可以用forEach进行循环，和循环数组的组别在于，forEach的第二个参数，因为set中不存在下标，所以第二个参数也是集合的元素。
            map:
            创建：new Map()
            用于存储多个键值对数据。在map出现之前使用对象存储键值对，但是有几个问题，键名只能是字符串，获取数据的数量不方便。键名容易和原型上的名称冲突。
            当描述一个整体，且属性不能随意添加删除时，适合用对象，当存储一些数据可以随意添加删除时可以用map。
            方法：可以用size或者键的数量。可以用set设置一个键值对，如果存在就修改它的值，不存在就添加。判断方法和set一样。delete用于删除指定的键值。
            遍历：遍历也可以用forEach和for of
       */
    </script>
</body>
</html>